package com.z.system.service;

import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import com.z.system.model.Dept;

/**
 * 部门服务接口
 */
public interface DeptService {

    /**
     * 根据ID获取部门
     */
    Dept getDeptById(UUID id);

    /**
     * 根据部门名称获取部门
     */
    Dept getDeptByName(String name);

    /**
     * 分页获取部门列表
     */
    Page<Dept> getDepts(Pageable pageable, Map<String, Object> params);

    /**
     * 获取所有部门
     */
    List<Dept> getAllDepts();

    /**
     * 获取部门树形结构
     */
    List<Dept> getDeptTree();

    /**
     * 根据父部门ID获取子部门
     */
    List<Dept> getChildDepts(UUID parentId);

    /**
     * 保存部门
     */
    Dept saveDept(Dept dept);

    /**
     * 更新部门
     */
    Dept updateDept(Dept dept);

    /**
     * 删除部门
     */
    void deleteDept(UUID id);

    /**
     * 批量删除部门
     */
    void deleteDepts(Set<UUID> ids);

    /**
     * 启用/禁用部门
     */
    void updateDeptStatus(UUID id, String enabled);

    /**
     * 检查部门是否有子部门
     */
    boolean hasChildDept(UUID id);

    /**
     * 检查部门是否有用户
     */
    boolean hasUserInDept(UUID id);

    /**
     * 获取部门统计信息
     */
    Map<String, Object> getDeptStatistics();

    /**
     * 根据部门名称模糊查询部门列表
     */
    List<Dept> searchDeptsByName(String name);

    /**
     * 获取部门用户数量统计
     */
    Map<UUID, Long> getDeptUserCounts();

    /**
     * 获取启用状态的部门列表
     */
    List<Dept> getEnabledDepts();
}